package com.theaf.basemodule.common.api;

import com.theaf.basemodule.common.dto.dataEx.DataDefDTO;
import com.theaf.core.repo.specification.SubqueryEx;

import java.util.List;
import java.util.Map;

/**
 * @Author:songwenke
 * @Description:数据扩展服务
 * @Date:create in 9:38 2018/3/16
 * @Modified By:
 **/
public interface DataExService {
    /**
     * 判断数据是否引用
     * @param groupNo
     * @return
     */
    boolean judgeRef(Long groupNo);
    /**
     * 查询对象的属性定义
     * @param obj 使用对象，支付多个以，分割
     * @param fieldPath 属性路径,为空表示主属性列表
     * @return
     */
    List<DataDefDTO> getAttrs(String obj,String fieldPath);

    /**
     * 查询对象下所有扩展属性，包括下级属性的
     * @param obj 匹配方式相等
     * @return 按对象类型的属性名称分组的属性集合
     */
    Map<String,List<DataDefDTO>> getAttrMap(String obj);

    /**
     * 获取业务的扩展条件
     * @param jsonTerm 条件
     * @param ref 与业务的关系
     * @return 子查询条件
     */
    List<SubqueryEx> getExTerm(String jsonTerm,String ref);

    /**
     * 查询子对象数据
     * @param parentGroupNo 父组ID
     * @param fieldName  对象属性名
     * @param term 其它条件
     * @return
     */
    List<Map> findSubData(Long parentGroupNo,String fieldName,Map<String,String> term);

    /**
     * 查询数据
     * @param groupNo 组号
     * @return
     */
    List<Map> find(Long groupNo);

    /**
     * 查询嵌套子数据，JSON结构
     * @param groupNo
     * @return
     */
    String findJson(Long groupNo);

    /**
     * 查询父对象
     * @param fieldToValueMap 自定义条件,
     * @param fieldName 结果属性名，如果为空表示主对象
     * @return
     */
    List<Map> findParent(Map fieldToValueMap,String fieldName);

    /**
     * 保存数据
     * @param json 注意名称是属性ID，不是属性名称
     * @param  obj 所属对象
     */
    void saveData(String json,String obj);

    /**
     * 删除数据
     * @param groupNo 组号
     */
    void deleteData(Long groupNo);
}
